/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package playlists;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.persistence.Query;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import artist.*;
import group.*;
import javax.persistence.EntityManager;
import radiostation.MainMenu;
import radiostation_POJOS.*;

/**
 *
 * @author elena
 */
public class searchSong extends javax.swing.JFrame {
    Playlist p;//playlist που θα προστεθεί το τραγούδι
    ArrayList<Song> songs;//λίστα τραγουδιών
    private ArrayList<Song> songsList;//arraylist των τραγουδιών που προκύπτουν από την αναζήτηση
    private DefaultListModel songsModel;//modelo pou tha koumposei pano sti lista
    private static EntityManager em;
    

    /**
     * Creates new form searchSong
     */
    public searchSong(Playlist p) {
        initComponents();
        setLocationRelativeTo(null);
        this.p=p;
        em =javax.persistence.Persistence.createEntityManagerFactory("RadiostationPU").createEntityManager();
            
        songs=new ArrayList();//δημιουργία arrylist
        songsList=new ArrayList();//δημιουργία arrylist
        songsModel = new DefaultListModel();//ftiaxno neo montelo
        Query q = em.createQuery("SELECT s FROM Song s ", Song.class);//ανάγνωση κομματιών από βάση
            
        List result = q.getResultList();
        
        if (!result.isEmpty()) { // αν επιστραφουν αποτελέσματα
            Iterator itr=result.iterator();//δεικτης στα κομμάτια
            //διάτρεξη καταστημάτων
            while (itr.hasNext()){
                Song s = (Song)itr.next();
                songs.add(s);//προσθήκη στη λίστα
            }
        }
        paintSongLists();//αρχικοποιώ τη λίστα κομματιών
    }
    void paintSongLists(){
        jList1.removeAll();//αφαίρεση όλων από λίστα
        songsModel.removeAllElements();//αφαίρεση όλων από μοντέλο
        
        if (jTextField1.getText().equals("")){//εάν δεν υπάρχει κάτι για αναζήτηση άρα εμφάνιση όλων των κομματιών
            songsList.clear();//καθαρισμός λίστας
            Iterator itr=songs.iterator();//δείκτης στα κομμάτια
            while (itr.hasNext()){
                Song s =(Song)itr.next();
                songsList.add(s);//προσθήκη στη λίστα
            }
        }
        else{
            songsList.clear();//καταρισμός λίστας κομματιών
            Iterator itr=songs.iterator();
            while (itr.hasNext()){//διάτρεξη λίστας
                Song s =(Song)itr.next();
                //εάν το πεδίο αναζήτησης είναι substring του τίτλου του κομματιού
                if (s.getTitle().indexOf(jTextField1.getText())>=0){                    
                    songsList.add(s);//προσθήκη στη λίστα
                }
            }
        }
        
        Iterator itr=songsList.iterator();//δείκτης στα σχετικά κομμάτια
        while (itr.hasNext()){
            Song s =(Song)itr.next();
            songsModel.addElement(s);//προσθήκη στο μπντέλο
        }
        
        
        jList1.setModel(songsModel);//vazo modelo sti list
        
        
        jList1.repaint();//επανασχεδίαση λίστας
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jList1 = new javax.swing.JList();
        jTextField1 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        jLabel1.setFont(new java.awt.Font("Monotype Corsiva", 1, 14)); // NOI18N
        jLabel1.setForeground(new java.awt.Color(153, 0, 51));
        jLabel1.setText("Εισαγωγή Κομματιού");

        jList1.setModel(new javax.swing.AbstractListModel() {
            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
            public int getSize() { return strings.length; }
            public Object getElementAt(int i) { return strings[i]; }
        });
        jScrollPane1.setViewportView(jList1);

        jButton1.setFont(new java.awt.Font("Calibri", 1, 12)); // NOI18N
        jButton1.setForeground(new java.awt.Color(153, 0, 51));
        jButton1.setText("Αναζήτηση");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setFont(new java.awt.Font("Calibri", 1, 12)); // NOI18N
        jButton2.setForeground(new java.awt.Color(153, 0, 51));
        jButton2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Add.png"))); // NOI18N
        jButton2.setText("Εισαγωγή");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        jButton3.setFont(new java.awt.Font("Calibri", 1, 12)); // NOI18N
        jButton3.setForeground(new java.awt.Color(153, 0, 51));
        jButton3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Log Out.png"))); // NOI18N
        jButton3.setText("Πίσω");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(123, Short.MAX_VALUE)
                .addComponent(jLabel1)
                .addGap(146, 146, 146))
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jScrollPane1)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(18, 18, 18)
                                .addComponent(jButton1)
                                .addGap(0, 0, Short.MAX_VALUE)))
                        .addContainerGap())
                    .addGroup(layout.createSequentialGroup()
                        .addGap(10, 10, 10)
                        .addComponent(jButton2)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jButton3)
                        .addGap(52, 52, 52))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButton1))
                .addGap(18, 18, 18)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton2)
                    .addComponent(jButton3))
                .addContainerGap(34, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents
    //πίσω στη φόρμα
    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed
        // TODO add your handling code here:
        editPlayList ep = new editPlayList(p, null);//δημιουργία φόρμας χωρίς να προσθέτω νέο κομμάτι
        this.dispose();
    }//GEN-LAST:event_jButton3ActionPerformed
    //αναζήτηση
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        // TODO add your handling code here
        paintSongLists();
    }//GEN-LAST:event_jButton1ActionPerformed

    //προσθήκη νέου κομματιού
    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
        // TODO add your handling code here:
        if (jList1.getSelectedIndex()>=0){//αν επέλεξα κάτι από τη λίστα
            Song s=(Song)jList1.getSelectedValue();//πιάνω το επιλεγμένο κομμάτι
            
            boolean found = false;//έλεγχος για την ύπαρξη κομματιού στη playlist
            
            Iterator itr=p.getSongList().iterator();//δείκτης στα κομμάτια της playlist
            while (itr.hasNext()){
                Song pls=(Song)itr.next();
                //ελέγχω αν το κομμάτι πάρχει ήδη
                if (s.getSongId()==pls.getSongId()){
                    found=true;
                    break;
                }
            }
            //αν δεν υπάρχει το κομμάτι
            if (!found){
                editPlayList ep = new editPlayList(p, s);//δημιουργώ φόρμα προσθέτοντας το νέο κομμάτι
                ep.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                ep.setVisible(true); //show the form;
                this.dispose();
            }
            else{
                JOptionPane.showMessageDialog(null, "Το τραγούδι ανήκει ήδη στη λίστα", "Λάθος", JOptionPane.ERROR_MESSAGE);
            }
        }
        else{
            JOptionPane.showMessageDialog(null, "Δεν επιλέξατε κάποιο τραγούδι", "Λάθος", JOptionPane.ERROR_MESSAGE);
        }
    }//GEN-LAST:event_jButton2ActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JList jList1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration//GEN-END:variables
}
